///
/// 扩展 Future
///
/// futures 组合在一起，从而生成一个元祖。
///
/// 一个 zipWith 可以将两个 future 组合在一起，生成一个元祖。
///
/* 
例子：
final ((name, year), married) = await Future.value("andrew")
    .zipWith(Future.value(1984))
    .zipWith(Future.value(false)); 
*/
extension FutureZipX<T> on Future<T> {
  Future<(T, T2)> zipWith<T2>(Future<T2> future2) async {
    late T result1;
    late T2 result2;

    await Future.wait(
      [
        then((it) => result1 = it),
        future2.then((it) => result2 = it),
      ],
    );
    return (result1, result2);
  }
}
